﻿using System;
using System.Threading;
using System.Threading.Tasks;

namespace Task阻塞方式
{
    class Program
    {
        static void Main(string[] args)
        {
            var task1=new Task(()=> {
                Thread.Sleep(1000);
                Console.WriteLine("这是task1");
            });
            var task2 = new Task(() => {
                Thread.Sleep(2000);
                Console.WriteLine("这是task2");
            });
            task1.Start();
            task2.Start();
            //task1.Wait();// 等待操作结束  类似 thread 中的join
            //task2.Wait();
            //Task.WaitAll(task1,task2);// WaitAll && 关系，2个必须都执行完
            //Task.WaitAny(task1,task2);// 只要任意一个执行完成
            //Task.WhenAll(task1, task2).ContinueWith(x =>
            //{
            //    Console.WriteLine("task1,task2执行完，的后续任务");
            //});

            Task.WhenAny(task1, task2).ContinueWith(x =>
            {
                // 任意一个执行完后就直接后续任务
                Console.WriteLine("后续任务");
            });

            //Task.Factory.ContinueWhenAll(new Task[2] { task1, task2 },(x)=> {
            //    Console.WriteLine("延续任务"); // 和上面一样，也有 ContinueWhenany
            //});


            Console.WriteLine("主线程");
            Console.Read();
                
        }
    }
}
